using System.Collections.Generic;
using System.Drawing;
using Infragistics.UltraChart.Resources.Appearance;

namespace PluginFrame
{
	public interface IPcrCell
	{
		int CellID { get; }

		IPcrExperiment PcrExperiment { get; }

		List<IPcrCell> MultiTubeCells { get; set; }

		int SourceID { get; set; }

		ISubModule SubModule { get; }

		string CellPosition { get; }

		IPcrExperimentProject Project { get; set; }

		int AmplificationStartCycle { get; }

		int AmplificationStopCycle { get; }

		int MeltingStartCycle { get; }

		int MeltingStopCycle { get; }

		double AmplificationCurveMin { get; set; }

		double AmplificationCurveMax { get; set; }

		double RawCurveMin { get; }

		double RawCurveMax { get; }

		double MeltingCurveMin { get; set; }

		double MeltingCurveMax { get; set; }

		double MeltingDevCurveMin { get; set; }

		double MeltingDevCurveMax { get; set; }

		int DataRowIndex { get; set; }

		List<double>[] InterpResult { get; set; }

		bool IsSetInterpResult { get; set; }

		bool IsBad { get; set; }

		XYSeries[] AlleleSeries { get; set; }

		double HRMNormalizedCurveMin { get; set; }

		double HRMNormalizedCurveMax { get; set; }

		double HRMNormalizedShiftCurveMin { get; set; }

		double HRMNormalizedShiftCurveMax { get; set; }

		double HRMPeakCurveMin { get; set; }

		double HRMPeakCurveMax { get; set; }

		int HRMGroupIndex { get; set; }

		double HRMDiffCurveMin { get; set; }

		double HRMDiffCurveMax { get; set; }

		List<double> HRMRawTemperatureList { get; set; }

		List<double> HRMRawFluorList { get; set; }

		List<byte[,]> LightRawByteData { get; }

		void SetCellInformation(string columnName, int channelIndex, string value);

		string GetCellInformation(string columnName, int channelIndex);

		void SetDetectionTypeColor(int channelIndex, Color color);

		Color GetDetectionTypeColor(int channelIndex);

		void InitializeLightDataList(int detectionCycleCount, int dataByteCount);

		void AddLightDataList(int newCycleCount, int dataByteCount);

		void InitializeAnalysisDataList();

		void AddLightDataCycle(int addedCycleCount, int dataByteCount);

		void RemoveLightDataCycle(int removedCycleCount);

		void AddNewLightData(int cycle, int channelIndex, byte[] data);

		void SetRawData(int channelIndex, int cycleIndex, double value);

		double GetRawData(int channelIndex, int cycleValue);

		double[] GetChannelRawData(int channelIndex, bool isOnlyAmplification);

		int GetChannelRawDataPoint(int channelIndex);

		double GetLightTemperature(int channelIndex, int cycleValue);

		double GetChannelLastLightTemperature(int channelIndex);

		List<double> GetChannelLightTemperatureList(int channelIndex);

		void AddLightTemperature(int channelIndex, double temperature);

		double GetNormalLightData(int channelIndex, int cycleIndex);

		double[] GetAmplificationLightDataArray(int channelIndex);

		double[] GetAmplificationLightDataArray(int channelIndex, int startCycle, int stopCycle);

		void SetNormalLightData(int channelIndex, int cycleIndex, double value);

		void CheckRawData(int channelIndex);

		double GetCurveLightData(int channelIndex, int dataIndex);

		void SetCurveLightData(int channelIndex, double cycle, double light);

		void SetMeltingCurveLightData(int channelIndex, double cycle, double light);

		void SetMeltingDevCurveLightData(int channelIndex, double cycle, double light);

		double GetCycleValue(int channelIndex);

		void SetCycleValue(int channelIndex, double value);

		double GetConcentration(int channelIndex);

		void SetConcentration(int channelIndex, double value);

		double GetBaseLineAvgValue(int channelIndex);

		void SetBaseLineAvgValue(int channelIndex, double value);

		double GetNormalBaseLineAvgValue(int channelIndex);

		void SetNormalBaseLineAvgValue(int channelIndex, double value);

		int GetAutoBaseLineStartValue(int channelIndex);

		void SetAutoBaseLineStartValue(int channelIndex, int value);

		int GetAutoBaseLineStopValue(int channelIndex);

		void SetAutoBaseLineStopValue(int channelIndex, int value);

		int GetAutoBaseLineRotationCount(int channelIndex);

		void SetAutoBaseLineRotationCount(int channelIndex, int value);

		bool GetIsNeedAnalysis(int channelIndex);

		void SetIsNeedReAnalysis(int channelIndex, bool value);

		void CaculateLightCrossTalk(IPcrExperimentProject project);

		void InitializeRawCurveSeries(int channelIndex);

		void InitializeMeltingCurveSeries(int channelIndex);

		void InitializeAmplificationCurveSeries(int channelIndex);

		void InitializeAllelePointSeries();

		void InitializeHRMCurveSeries(int channelIndex);

		void ClearRawCurveSeries();

		void ClearMeltingCurveSeries();

		void ClearRealTimeAmplicationCurveSeries();

		XYSeries GetRawCurveSeries(int channelIndex);

		XYSeries GetMeltingCurveSeries(int channelIndex);

		XYSeries GetMeltingDevCurveSeries(int channelIndex);

		XYSeries GetHRMNormalizedCurveSeries();

		XYSeries GetHRMNormalizedShiftCurveSeries();

		XYSeries GetHRMPeakCurveSeries();

		XYSeries GetHRMDiffCurveSeries();

		int GetAmplificationCurvePointCount(int channelIndex);

		XYSeries GetAmplificationCurveSeries(int channelIndex);

		bool CheckChannelIsAvailable(int channelIndex);

		void SetRawCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetAmplificationCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetMeltingCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetMeltingDevCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetHRMNormalizedShiftDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetHRMNormalizedCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetHRMDiffCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void SetHRMPeakCurveDisplay(int channelIndex, bool isDisplay, Color curveColor);

		void RawCurveAddPoint(int channelIndex, double light, int cycle, bool empty);

		void AddPointToRawCurve(int channelIndex, bool isPointLimit, int limitValue);

		void AddPointToMeltingRawCurve(int channelIndex, int startIndex, int stopIndex);

		void MeltingCurveAddPoint(int channelIndex, double light, double degree, bool empty);

		void CurveAddPoint(int channelIndex, double light, double cycle, bool empty);

		void SetMultiCellList(int channelIndex, List<IPcrCell> pcrCellList);

		List<IPcrCell> GetMultiCellList(int channelIndex);

		void ExportRawByteData(int channelIndex);

		bool SaveLightRawData();

		void LoadLightRawData();

		AnalysisError NormalizeMeltingCurve(int channelIndex);

		void CalculateMeltingDevCurve(int channelIndex, IMeltingAnalysisParameterConfiguration meltingAnalysisParameterConfiguration);

		void SetMeltingResultDataCount(int channelIndex, int value);

		int GetMeltingResultDataCount(int channelIndex);

		int GetMeltingResultDataCountFromCurve(int channelIndex);

		void InitializeMeltingResultDataCount();

		void SetRuleCalculationValueCount(int channelIndex, int value);

		int GetRuleCalculationDataCount(int channelIndex);

		void InitializeRuleCalculationValueCount();

		IPcrCell GetLastCellFromMultiTubeCells(CellDisplaySortStyle displaySortStyle);
	}
}
